/**
 * Review路由模块
 */

var express = require("express");
var router = express.Router();

const review = require("../controller/review");
const auth = require("../controller/auth");


//定义路由

//守卫路由：所有路由必须执行权限控制的判断
router.all("*", auth.isLogin);

//TODO:增加新的功能，及增加对应的路由、控制器以及访问数据库的数据模型

/**
 * @swagger
 * /review/user:
 *   get:
 *     summary: 获取指定用户的评论列表信息
 *     description: 根据登录用户ID获取其评论列表。
 *     security:
 *       - bearerAuth: []
 *     responses:
 *       200:
 *         description: 成功获取指定用户的评论列表
 *       401:
 *         description: 未授权访问
 */
router.get("/user", review.findAllByUserId);

/**
 * @swagger
 * /review/user/count:
 *   get:
 *     summary: 获取指定用户的评论总数
 *     description: 获取指定用户的评论总数，需要管理员权限。
 *     security:
 *       - bearerAuth: []
 *     responses:
 *       200:
 *         description: 成功获取指定用户的评论总数
 *       401:
 *         description: 未授权访问
 *       403:
 *         description: 无权限访问
 */
router.get("/user/count",auth.isAdmin, review.getCountByUserId);
/**
 * @swagger
 * /review/count:
 *   get:
 *     summary: 获取评论总数
 *     description: 获取所有评论的总数，需要管理员权限。
 *     security:
 *       - bearerAuth: []
 *     responses:
 *       200:
 *         description: 成功获取评论总数
 *       401:
 *         description: 未授权访问
 *       403:
 *         description: 无权限访问
 */
router.get("/count",auth.isAdmin, review.getCount);
/**
 * @swagger
 * /review/{id}:
 *   get:
 *     summary: 获取单个评论信息
 *     description: 根据评论ID获取评论详情。
 *     parameters:
 *       - in: path
 *         name: id
 *         required: true
 *         schema:
 *           type: string
 *         description: 评论ID
 *     security:
 *       - bearerAuth: []
 *     responses:
 *       200:
 *         description: 成功获取评论信息
 *       401:
 *         description: 未授权访问
 *       404:
 *         description: 评论未找到
 */
router.get("/:id", review.find);
/**
 * @swagger
 * /review:
 *   post:
 *     summary: 添加评论
 *     description: 创建一条新的评论。
 *     requestBody:
 *       required: true
 *       content:
 *         application/json:
 *           schema:
 *             type: object
 *             properties:
 *               content:
 *                 type: string
 *                 description: 评论内容
 *     security:
 *       - bearerAuth: []
 *     responses:
 *       201:
 *         description: 成功创建评论
 *       400:
 *         description: 请求参数错误
 *       401:
 *         description: 未授权访问
 */
router.post("/", review.add);


/**
 * @swagger
 * /review:
 *   get:
 *     summary: 获取所有评论列表
 *     description: 获取所有评论的列表，需要管理员权限。
 *     security:
 *       - bearerAuth: []
 *     responses:
 *       200:
 *         description: 成功获取评论列表
 *       401:
 *         description: 未授权访问
 */
router.get("/", auth.isAdmin, review.findAll);
/**
 * @openapi
 * /review/{id}:
 *   put:
 *     summary: 更新评论
 *     description: 更新指定ID的评论内容，需要管理员权限。
 *     parameters:
 *       - in: path
 *         name: id
 *         required: true
 *         schema:
 *           type: string
 *         description: 评论ID
 *     requestBody:
 *       required: true
 *       content:
 *         application/json:
 *           schema:
 *             type: object
 *             properties:
 *               replyContent:
 *                 type: string
 *                 description: 回复内容
 *     security:
 *       - bearerAuth: []
 *     responses:
 *       200:
 *         description: 成功更新评论
 *       400:
 *         description: 请求参数错误
 *       401:
 *         description: 未授权访问
 *       404:
 *         description: 评论未找到
 */
router.put("/:id", auth.isAdmin, review.update);

/**
 * @swagger
 * /review/{id}:
 *   delete:
 *     summary: 删除评论
 *     description: 删除指定ID的评论，评论所有者或管理员可操作。
 *     parameters:
 *       - in: path
 *         name: id
 *         required: true
 *         schema:
 *           type: string
 *         description: 评论ID
 *     security:
 *       - bearerAuth: []
 *     responses:
 *       204:
 *         description: 成功删除评论
 *       504:
 *         description: 服务器超时
 *       401:
 *         description: 未授权访问
 *       403:
 *         description: 无权限删除评论
 *       404:
 *         description: 评论未找到
 */
router.delete("/:id", review.remove);

module.exports = router;